package edu.spec.wechat.kit;

import edu.spec.wechat.model.DuplicateMessage;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Created by MadFrog on 2016/11/3.
 */
public class DuplicateMessageKit {
    public static final List<DuplicateMessage> DM = new ArrayList<DuplicateMessage>();

    /**
     * 检查某条消息是不是重复的消息
     * @param map 消息map
     * @return 是重复的消息返回true，不是重复的消息返回false
     */
    public static boolean checkDuplicate(Map<String, Object> map){
        String msgId = (String)map.get("MsgId");
        DuplicateMessage dm = new DuplicateMessage(msgId);
        if(DM.contains(dm)){
            return true;
        }else {
            DM.add(dm);
            return false;
        }
    }

    /**
     * 微信服务器在五秒内收不到响应会断掉连接，并且重新发起请求，总共重试三次
     * 消息的备查期为30s，超过30s还收到重复的消息，认为是不可能的。
     */
    public static void clearExpire(){
        DuplicateMessage dmsg = null;
        for (int i=0; i<DM.size(); i++){
            dmsg = DM.get(i);
            dmsg.getArrivalTime();
            //时间差，单位是豪秒milliseconds
            Long timeDifferenece = System.currentTimeMillis() - dmsg.getArrivalTime();
            if ((timeDifferenece/1000)>30){
                DM.remove(dmsg);
            }
        }
    }

}
